﻿using SMS.dao;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SMS.cntr
{
    public class BlockCntr
    {
        private static readonly BlockCntr INSTANCE = new BlockCntr();

        public static BlockCntr Instance
        {
            get
            {
                return INSTANCE;
            }
        }

        private BlockCntr() { }
		
		public bool createBlock ( string blockName)
		{
            if (validateAddBlock(blockName))
            {
                int result = BlockDao.Instance.insert(blockName);
                return result == 1 ? true : false;
            }
            return false;
        }

        public DataTable listAll()
        {
            return BlockDao.Instance.findAll();
        }

        private bool validateAddBlock(string blockName)
        {
            DataTable dt = BlockDao.Instance.findBlockName(blockName);
            if (blockName.Equals("")) { MessageBox.Show("Chưa nhập tên khối!"); return false; }
            else if (dt.Rows.Count == 1) { MessageBox.Show("Đã có khối có tên này. Xin chọn tên khác !"); return false; }
            return true;

        }
		
		public void update(String blockName, String blockID)
        {
            if (validateUpdateBlock(blockName))
            {
                int result = BlockDao.Instance.update(blockName, blockID);

                if (result == 1)
                {
                    MessageBox.Show(" Sửa tên khối thành công !");
                }
            }
        }

        public bool validateUpdateBlock(String blockName)
        {
            DataTable dt = BlockDao.Instance.findBlockName(blockName);
            if (blockName.Equals("")) { MessageBox.Show("Mời điền tên cho khối"); return false; }
            else if (dt.Rows.Count == 1) { MessageBox.Show("Đã có khối có tên này. Xin chọn tên khác !"); return false; }
            return true;
        }

        public void delete(int blockID)
        {
            if (validateDeleteBlock(blockID))
            {
                int result = BlockDao.Instance.deleteBlockInNull(blockID);

                if (result == 1)
                {
                    MessageBox.Show("Xóa khối thành công !");
                }
            }
        }

        public bool validateDeleteBlock(int blockID)
        {
            if ( int.Parse(BlockCntr.Instance.countClazz(blockID).ToString()) != 0 )
            {
                MessageBox.Show("Khối này đã có lớp không được xóa, Mời xóa lớp trước");
                return false;
            }
            return true;
        }

        public DataTable listAllBlockCounted()
        {
            return BlockDao.Instance.countClazzByBlockId();
        }


        public int countClazz(int blockID)
        {
         DataTable ketqua =  BlockDao.Instance.countClazzInBlock(blockID);
         return ketqua.Rows.Count;
        }
    }
}
